// test_follow.js - 测试关注功能接口
const axios = require('axios');

// 配置
const BASE_URL = 'http://localhost:3000/api';
let token = '';
const targetUserId = 1; // 目标用户ID（被关注者）

/**
 * 登录获取token
 */
async function login() {
  try {
    const response = await axios.post(`${BASE_URL}/auth/login`, {
      username: 'user',
      password: '123456'
    });
    
    if (response.data.code === 200) {
      token = response.data.data.token;
      console.log('登录成功，获取到token');
      return true;
    } else {
      console.error('登录失败:', response.data.message);
      return false;
    }
  } catch (error) {
    console.error('登录请求失败:', error.message);
    return false;
  }
}

/**
 * 测试关注用户接口
 */
async function testFollowUser() {
  try {
    const response = await axios.post(
      `${BASE_URL}/interactions/follow`,
      { userId: targetUserId },
      {
        headers: {
          'Authorization': `Bearer ${token}`,
          'Content-Type': 'application/json'
        },
        timeout: 10000
      }
    );
    
    console.log('关注用户接口响应:', response.data);
    return response.data.code === 200;
  } catch (error) {
    console.error('关注用户请求失败:', error.response?.data || error.message);
    return false;
  }
}

/**
 * 测试取消关注用户接口
 */
async function testUnfollowUser() {
  try {
    const response = await axios.post(
      `${BASE_URL}/interactions/unfollow`,
      { userId: targetUserId },
      {
        headers: {
          'Authorization': `Bearer ${token}`,
          'Content-Type': 'application/json'
        },
        timeout: 10000
      }
    );
    
    console.log('取消关注用户接口响应:', response.data);
    return response.data.code === 200;
  } catch (error) {
    console.error('取消关注用户请求失败:', error.response?.data || error.message);
    return false;
  }
}

/**
 * 测试检查关注状态接口
 */
async function testCheckFollowStatus() {
  try {
    const response = await axios.get(
      `${BASE_URL}/interactions/follow/status?userId=${targetUserId}`,
      {
        headers: {
          'Authorization': `Bearer ${token}`
        },
        timeout: 10000
      }
    );
    
    console.log('检查关注状态接口响应:', response.data);
    return response.data.code === 200;
  } catch (error) {
    console.error('检查关注状态请求失败:', error.response?.data || error.message);
    return false;
  }
}

/**
 * 运行所有测试
 */
async function runTests() {
  console.log('开始测试关注功能接口...');
  
  // 1. 登录
  const loggedIn = await login();
  if (!loggedIn) {
    console.log('登录失败，无法继续测试');
    return;
  }
  
  // 2. 先检查当前关注状态
  console.log('\n1. 检查初始关注状态:');
  await testCheckFollowStatus();
  
  // 3. 测试关注用户
  console.log('\n2. 测试关注用户:');
  const followSuccess = await testFollowUser();
  
  if (followSuccess) {
    // 4. 再次检查关注状态
    console.log('\n3. 检查关注后的状态:');
    await testCheckFollowStatus();
    
    // 5. 测试取消关注
    console.log('\n4. 测试取消关注:');
    await testUnfollowUser();
    
    // 6. 最后检查关注状态
    console.log('\n5. 检查取消关注后的状态:');
    await testCheckFollowStatus();
  }
  
  console.log('\n关注功能测试完成');
}

// 运行测试
runTests().catch(err => {
  console.error('测试过程中发生错误:', err);
});